//
//  User.swift
//  hello
//
//  Created by yafei li on 2025/9/8.
//
// 定义用户模型 (User.swift)
import Fluent
import Vapor
 
// ✅ 明确声明：这个类是 Sendable，但由我保证安全
final class User: Model, @unchecked Sendable {
    static let schema = "user" // 数据库中的表名
    
    @ID
    var id: UUID?
    
    @Field(key: "name") // 映射数据库中的 "name" 列
      var name: String

    @Field(key: "age") // 映射数据库中的 "age" 列
      var age: Int
    
    @Field(key: "phone") // 映射数据库中的 "phone" 列
      var phone: String
    
    @Field(key: "password_hash") // 映射数据库中的 "password_hash" 列
      var passwordHash: String

    init() { }

    init(id: UUID?  = nil,name: String,age: Int,phone:String, password: String) throws {
        self.id = id
        self.name = name
        self.age = age
        self.phone = phone
        self.passwordHash = try! Bcrypt.hash(password).base64String() // 存储哈希值而非明文密码
    }
    func verify(password: String) throws -> Bool {
        guard let hash =  String(data: Data(base64Encoded: self.passwordHash) ?? Data(), encoding: .utf8) else { return false }
        return try Bcrypt.verify(password, created: hash)
    }
    func toDTO() -> UserDTO {
        .init(
            id: self.$id.value,
            name: self.$name.value,
            age: self.$age.value,
            phone: self.$phone.value
        )
    }

}
